/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.laporanrekapitulasipendapatan;

import java.text.DecimalFormat;
import java.util.Map;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.zkoss.zkmax.zul.Filedownload;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listhead;
import org.zkoss.zul.Listheader;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;

/**
 * Digunakan untuk menangani komponen laporanrekapitulasianggaranpendapatan.LaporanRekapitulasiPendapatan.zul
 * @author kris
 */
public class LaporanRekapitulasiPendapatanWnd extends ClassApplicationModule {

    private Combobox cmbboxTahunAnggaran;
    private Listbox lstboxReport;
    private Label lblTotalAnggaran;
    private Button btnExport;
    private LaporanRekapitulasiPendapatanDAO rekapitulasiPendapatanDAO;

    public LaporanRekapitulasiPendapatanWnd() {
        rekapitulasiPendapatanDAO = new LaporanRekapitulasiPendapatanDAOImpl();
    }

    /**
     * Digunakan untuk pengisiaan data tahun anggaran kedalam komponen cmbboxTahunAnggaran
     * @throws Exception
     */
    public void loadCombobox() throws Exception {
        btnExport.setDisabled(false);
        cmbboxTahunAnggaran.getItems().clear();
        for (Map map : rekapitulasiPendapatanDAO.getTahunFromPosPendapatanUnit()) {
            Comboitem item = new Comboitem();
            item.setValue(map);
            item.setLabel(map.get("tahunAnggaran").toString());
            cmbboxTahunAnggaran.appendChild(item);
        }
    }

    /**
     * Digunakan untuk menangani event pada saat cmbboxTahunAnggaran dipilih
     * @throws Exception
     */
    public void cmbboxTahunAnggaranOnSelect() throws Exception {
        Listhead listhead = lstboxReport.getListhead();
        listhead.getChildren().clear();
        lstboxReport = listhead.getListbox();
        lstboxReport.getItems().clear();
        Map map = (Map) cmbboxTahunAnggaran.getSelectedItem().getValue();
        String tahun = map.get("tahunAnggaran").toString();
        Listheader lstheadNamaUnitKerja = new Listheader("Nama Unit Kerja", "", "300px");
        listhead.appendChild(lstheadNamaUnitKerja);
        boolean kolom = true;
        DecimalFormat df = new DecimalFormat("#,##0.00");
        double total = 0;
        //revisied by : sarah (BAPSI), tgl 14-12-2009
        if (rekapitulasiPendapatanDAO.CekUnitKerja(tahun).isEmpty() == true) {
            Messagebox.show("Data Tidak Ada", "Informasi", Messagebox.OK, Messagebox.INFORMATION);
            lblTotalAnggaran.setValue("0.00");
            btnExport.setDisabled(true);

        } else {
            for (Map row : rekapitulasiPendapatanDAO.getNamaUnitKerja(tahun)) {
                double jumlah = 0;
                Listitem item = new Listitem();
                item.setValue(row);
                item.appendChild(new Listcell(row.get("Nama_unit_kerja").toString()));
                for (Map column : rekapitulasiPendapatanDAO.getPosPendapatan(tahun)) {
                    if (kolom) {
                        Listheader listheader = new Listheader(column.get("posPendapatan").toString(), "", "100px");
                        listhead.appendChild(listheader);
                        listheader.setAlign("right");
                    }
                    /*revisied by : sarah (BAPSI), tgl 14-12-2009
                    Double hasil = rekapitulasiPendapatanDAO.getHasil(tahun, row.get("Nama_unit_kerja").toString(), column.get("posPendapatan").toString());
                    if (hasil != null) {
                    jumlah += hasil;
                    item.appendChild(new Listcell(df.format(hasil)));
                    total += hasil;
                    } else {
                    item.appendChild(new Listcell("-"));
                    }*/
                    if (row.get("Nama_unit_kerja").toString().compareTo("TOTAL PENDAPATAN") != 0) {
                        Double hasil = rekapitulasiPendapatanDAO.getHasil(tahun, row.get("Nama_unit_kerja").toString(), column.get("posPendapatan").toString());
                        if (hasil != null) {
                            jumlah += hasil;
                            item.appendChild(new Listcell(df.format(hasil)));
                            total += hasil;

                        } else {
                            item.appendChild(new Listcell("-"));

                        }
                    } else {
                        Double hasil = rekapitulasiPendapatanDAO.getTotalPerPosPendapatan(tahun, column.get("posPendapatan").toString());
                        if (hasil != null) {
                            jumlah += hasil;
                            item.appendChild(new Listcell(df.format(hasil)));
                            total += hasil;
                        } else {
                            item.appendChild(new Listcell("-"));
                        }
                    }
                }
                item.appendChild(new Listcell(df.format(jumlah)));
                if (kolom) {
                    Listheader lstheadTotal = new Listheader("Total", "", "100px");
                    lstheadTotal.setAlign("right");
                    listhead.appendChild(lstheadTotal);
                }

                kolom = false;
                if (row.get("Nama_unit_kerja").toString().compareTo("TOTAL PENDAPATAN") == 0) {
                    item.setStyle("text-decoration:bold;");
                    item.setHeight("40px");
                }
                lstboxReport.appendChild(item);
            }
            lblTotalAnggaran.setValue(df.format(rekapitulasiPendapatanDAO.getTotalAll(tahun)));
            btnExport.setDisabled(false);
        }

    }

    public void onCreate() throws Exception {
        cmbboxTahunAnggaran = (Combobox) getFellow("cmbboxTahunAnggaran");
        lstboxReport = (Listbox) getFellow("lstboxReport");
        lblTotalAnggaran = (Label) getFellow("lblTotalAnggaran");
        btnExport = (Button) getFellow("btnExport");
        loadCombobox();
    }

    /**
     * Digunakan untuk melakuakn export data ke csv
     */
    public void btnExportOnClick() {
        String s = ";";
        StringBuffer sb = new StringBuffer();

        for (Object head : lstboxReport.getHeads()) {
            String h = "";
            for (Object header : ((Listhead) head).getChildren()) {
                h += ((Listheader) header).getLabel() + s;
            }
            sb.append(h + "\n");
        }
        for (Object item : lstboxReport.getItems()) {
            String i = "";
            for (Object cell : ((Listitem) item).getChildren()) {
                i += ((Listcell) cell).getLabel() + s;
            }
            sb.append(i + "\n");
        }
        Filedownload.save(sb.toString().getBytes(), "text/plain", "hasilRekapAnggaran.csv");
    }
}
